package com.cros.image;


import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;

/**
 * Ejemplo de un captura de pantalla( screenshot ) basado en Java.
 * 1.- Obtiene el tama�o del rectangulo
 * 2.- Genera el screenshot basado en el tama�o del rectangulo.
 * 3.- Esbribe la imagen en un fichero.
 *
 **/
public class Screenshot {
	private Rectangle rectangle;
	private String path;
	private String file;
	
	public Screenshot(String path,String file){
		// obtenemos el tama�o del rectangulo
		rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); 
		this.path = path;
		this.file = file;
	}
	
	public Screenshot(){
		// obtenemos el tama�o del rectangulo
		rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
		path=System.getProperty("user.home")+File.separatorChar+".tmpImg"+File.separatorChar;
		file=System.currentTimeMillis()+".jpg";
	}
	
	public void writeScreenshot(){
        
        try {
            Robot robot = new Robot();
            // tomamos una captura de pantalla( screenshot )
            BufferedImage bufferedImage = robot.createScreenCapture(rectangle);
            String pathFile = path.concat(file);
            System.out.println("path file: "+pathFile);
            
            File dir = new File(path);
            
            if (!dir.exists())
                dir.mkdirs();
            
            File f = new File(file);
            if (!f.exists())
                f.createNewFile();
            
            FileOutputStream out = new FileOutputStream(pathFile,false);

            // esbribe la imagen a fichero
            ImageIO.write(bufferedImage, "jpg", out);

        } catch (AWTException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
	}
	
	public void deleteScreenshot(){  
         String pathFile = path.concat(file);
            
         File file = new File(pathFile);
         
         if(!file.exists()){
        	 System.out.println("the file doesnt exist");
         }else{
        	 file.delete();
        	 System.out.println("the file was delete");
         }
           
	}
	/*
	public static void main(String argv[]){
		Screenshot s = new Screenshot ();
		s.writeScreenshot();
		s.deleteScreenshot();
	}
	*/
	
	public void setRectangle(Rectangle rectangle) {
		this.rectangle = rectangle;
	}

	public Rectangle getRectangle() {
		return rectangle;
	}

	public void setPath(String path) {
		this.path = path;
	}

	public String getPath() {
		return path;
	}

	public void setFile(String file) {
		this.file = file;
	}

	public String getFile() {
		return file;
	}
	
	 //arreglo de teclas para escribholir "HOLA MUNDO" en la ventana activa del escritorio
		    final static int teclas[] = {
		        KeyEvent.VK_H, KeyEvent.VK_O,
		        KeyEvent.VK_L, KeyEvent.VK_A,
		        KeyEvent.VK_SPACE, KeyEvent.VK_M,
		        KeyEvent.VK_U, KeyEvent.VK_N,
		        KeyEvent.VK_D, KeyEvent.VK_O
		    };
		 
		    public static void main(String[] args) throws AWTException {
		        //instanciamos la clase Robot
		        Robot robot = new Robot();
		 
		        //esperamos 2 segundos antes de empezar a escribir
		        robot.delay(2000);
		        
		 
		        //iteramos a través del arreglo de teclas
		        for (int i = 0 ; i < teclas.length ; i++) {
		            //presionamos y soltamos cada tecla del array
		            robot.keyPress(teclas[i]);
		            robot.keyRelease(teclas[i]);
		 
		            //dormimos el robot por 250 mili segundos luego de usar cada tecla
		            robot.delay(250);
		        }
		        
		        while(true){
		        	
		        }
		    }
		    
		    
		    /*
		     * 
		     * Prestar atención en el uso del método void delay(int milisegundos) el cual puede sernos de gran utilidad para demorar las acciones del robot, ten a mano una ventana de NotePad (o cualquier otro editor de texto) abierta y luego de ejecutar este ejemplo actívala para ver el resultado.
		     * */
	
	/*Presionar y soltar una tecla
	 * 
	 * 07	    public static void main(String[] args) throws AWTException {
08	        //instanciamos un robot
09	        Robot robot = new Robot();
10	 
11	        //abrir el menú inicio en windows
12	        robot.keyPress(KeyEvent.VK_WINDOWS);
13	        robot.keyRelease(KeyEvent.VK_WINDOWS);
14	    }
	 * 
	 * 
	 * */
		    
		    //http://stackoverflow.com/questions/8576390/java-keypressed-event-not-firing
	
}

